--[[--------
XWLUA模块：信号选择器

信号选择器类似于事件标志，使用位图来管理一组 **同步对象** 。使得单一线程可以同时等待一组不同的 **同步对象** 。

每个 **同步对象** 在信号选择器位图中都绑定一个特定的 **位** ，
当这些 **同步对象** 发送 **选择信号** 时，信号选择器位图中特定的 **位** 被设置，同时使得等待信号选择器的线程被唤醒。


## 选择信号

**选择信号** 对于不同的 **同步对象** 有不同解释：

### 信号量

指发布操作 `semsp:post`() ；

### 条件量

指广播操作 `condsp:broadcast`() ，单播 `condsp:unicast`() 不会向信号选择器发送 **选择信号** ；

### 事件标志

指事件标志位图中任何一位发生改变：

+ `flgsp:s1m`()
+ `flgsp:s1i`()
+ `flgsp:c0m`()
+ `flgsp:c0i`()
+ `flgsp:x1m`()
+ `flgsp:x1i`()

### 线程栅栏

指所有线程抵达同步点，并调用 `brsp:wait`() 或 `brsp:wait_to`() ；

### 信号选择器

信号选择器本身也是 **同步对象** ，也可绑定在另一个信号选择器上。当源信号选择器收到了 **选择信号** ，会将其传递到绑定的另一个目的信号选择器上。


@module xwos.sync.sel
]]

--[[--------
新建信号选择器

@tparam number num (**in**) 信号槽的数量

@treturn userdata 新的信号选择器对象的强指针 `selsp`

@usage
sel = xwos.sel.new(32) -- 创建拥有32个槽的信号选择器
]]
function new(num)
end
